package com.daohang361.imqq.decoder;

import java.io.UnsupportedEncodingException;
import com.daohang361.imqq.Asycore.QQUser;
import com.daohang361.imqq.protocol.QQ2011;
import com.daohang361.imqq.tool.Hex2Bytes;
import com.daohang361.imqq.tool.MyUtil;

/**
示例一
--00 CE 接收命令 
15 C4 41 D0 66 2B 4F EC 00 09 7E 90 0A 80 43 AA
1F 40 00 A6 00 00 00 15 00 06 00 04 00 01 01 01
00 01 00 04 00 00 00 00 00 03 00 01 02 21 07 15
C4 41 D0 66 2B 4F EC 9C AE 32 68 AE 67 39 27 C6
BA 3E 3E 23 A3 D6 D7 00 0B 0C 59 4D 9D A9 10 01
9E 00 00 00 01 01 00 00 00 01 4D 53 47 00 00 00
00 00 4D 9D A9 10 F0 65 43 CE 00 00 00 00 09 00
86 00 00 0C E5 BE AE E8 BD AF E9 9B 85 E9 BB 91
00 00 01 00 36 01 00 33 31 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 31 31 31 
[
15 C4 41 D0 [发送QQ号码：365183440 ] 
66 2B 4F EC [接收QQ号码：1714114540]
00 09 7E 90 0A 80 43 AA [回复收到时填充的数据]
1F 40 [端口]
00 A6 [信息类型：好友]
00 00 
00 15 [长度]
00 06 00 04 00 01 01 01 00 01 00 04 00 00 00 00 00 
03 00 01 02 [内容]
21 07 [QQ版本]
15 C4 41 D0 66 2B 4F EC [发送QQ号码：365183440 1714114540] 
9C AE 32 68 AE 67 39 27 C6 BA 3E 3E 23 A3 D6 D7 [会话令牌]
00 0B [00 AF震动，也可能是对方正在准备发消息的一个标志]
0C 59 [不知道（会变）]
4D 9D A9 10[ 时间：2011/4/7 20:07:44] 
01 9E [发送者头像]
00 00 00 01 [是否含有字体属性]
01 [消息分片数?消息类型??] 
00 [消息分片号]
00 00[消息ID] 
01 [是否自动回复]
4D 53 47 00[MSG] 
00 00 00 00[固定]
4D 9D A9 10 [ 时间：2011/4/7 20:07:44]
F0 65 43 CE 
00 00 00 00 09 00 86 00 
00 0C [字体长度]
E5 BE AE E8 BD AF E9 9B 85 E9 BB 91[微软雅黑]
00 00 
01 [02为自定义表情]
00 36 
01 
00 33[消息长度:51] 
31 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
31 31 31 31 31 31 31 31 31 31 31[消息:1111...]
]

示例二:
发送0XDD后服务器返回的CE命令
15 C4 41 D0 
66 2B 4F EC 
00 0E C5 3F AC 17 0A 1C
1F 40 
00 A6 
00 00
00 0D 
00 06 00 04 00 01 01 01 00 03 00 01 01 
21 07 
15 C4 41 D0 66 2B 4F EC 
25 44 A2 5A EF 35 D5 8C C0 41 F9 74 27 58 A5 D5 
00 AD 
44 40 
4D E1 DA ED [ 时间：2011-5-29 13:34:37]
01 9E 
00 00 00 01 
03

*/

public class DecoderCE extends AbstractDecoder {
	@Override
	public QQUser decode() throws Exception {
		sessionQQ.setPakage(sessionQQ.getPakage()+1);//发送包自动增长
		myArray.decryptRemain(sessionQQ.getAttr("SessionKey"));
		decryptAll=myArray.extract(0, 15);
		//此三行放前面，用于防止转换异常，导致此包无返回，进而让服务器认为QQ网络异常
		sessionQQ.setSend(decryptAll);//需要回复给服务器前16字节
		sessionQQ.setCommand(0xCE);
		sessionQQ.addAttr("CEPakage", myArray.getPakage());
		
		print();
		
		return sessionQQ;
		
		}
	
	@SuppressWarnings("unused")
	public void print(){
		try {
			myArray.extract(0, 1);
			String messageType =Hex2Bytes.bytesToHexString( myArray.extract(0, 1));//类型：00 a6 :好友
			System.out.println("messageType:"+messageType);
//			myArray.extract(0, 26);//踢出到QQ版本结束
			myArray.extract(0, 1);
			int tempLenth = myArray.extractInt(0, 1);
			myArray.extract(0, tempLenth-1);
			byte[] test = myArray.extract(0, 1);
			System.out.println("CE test:"+Hex2Bytes.bytesToHexString(test));
			System.out.println("QQ2011.QQ_PROTOCOL_VERSION:"+QQ2011.QQ_PROTOCOL_VERSION);
			if(tempLenth==0x0D)
				return;//示例二情况，不需要打印后面的东西了,示例一的此处长度一般为0x15
			
			int msgFrom = MyUtil.bytes2Integer(myArray.extract(0, 3));//发生者QQ号码
			myArray.extract(0, 3);//踢出接受者号码
			myArray.extract(0, 15);//踢出令牌
			String sendState = Hex2Bytes.bytesToHexString(myArray.extract(0, 1));
			myArray.extract(0, 1);//
			String sendTime=MyUtil.bytes2Time(myArray.extract(0, 3));//发送时间
			byte[] sendFace=myArray.extract(0,1);//发生者头像
			myArray.extract(0, 32);//此处略掉33字节，有空闲时再来完善消息分片
			/*
			00 00 00 01 [是否含有字体属性]
			01 [消息分片数] 
			00 [消息分片号]
			00 00[消息ID] 
			01 [是否自动回复]
			4D 53 47 00[MSG] 
			00 00 00 00[固定]
			4D 9D A9 10 [ 时间：2011/4/7 20:07:44]
			F0 65 43 CE 
			00 00 00 00 09 00 86 00 
			 */
			int fontSize=MyUtil.bytes2Integer(myArray.extract(0, 1));
			String font =new String(myArray.extract(0, fontSize-1),"UTF-8")	;//字体
			myArray.extract(0, 1);
			int define = MyUtil.bytes2Integer(myArray.extract(0, 0));//01为文字 [02为自定义表情]
			myArray.extract(0, 2);
			int contexLength = MyUtil.bytes2Integer(myArray.extract(0, 1));//消息 长度
			String contex = new String(myArray.extract(0, contexLength-1),"UTF-8");
			
			System.out.println("时间["+sendTime+"]来自["+msgFrom+"]消息:"+"字体["+font+"]内容:"+contex);
		} catch (UnsupportedEncodingException e) {
			System.out.println("转换UTF-8失败");
			e.printStackTrace();
		}catch(NumberFormatException e){
			System.out.println("转换数字失败!");
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
